2 #ifndef FRAMELIB_PARAMETERS_H 3 #define FRAMELIB_PARAMETERS_H 33 enum SetError { kSetSucceeded, kUnknownArgument, kUnknownParameter, kParameterNotSetByNumber, kParameterNotSetByString, kEnumUnknownIndex, kEnumUnknownString };
85 template <
class T> T *data() {
return reinterpret_cast<T *
>(mData); }
105 char *
getTag()
const {
return reinterpret_cast<char *
>(mPtr + sizeType() + sizeSize()); }
120 size_t read(
double *output,
unsigned long size)
const;
131 Entry getEntry()
const;
136 unsigned long mIndex;
156 static size_t calcSize(
const Serial *serialised) {
return serialised !=
nullptr ? serialised->
mSize : 0; }
158 static size_t calcSize(
const char *tag,
const char *str) {
return sizeType() + sizeString(tag) + sizeString(str); }
159 static size_t calcSize(
const char *tag,
size_t N) {
return sizeType() + sizeString(tag) + sizeArray(N); }
163 size_t getSize(
const char *tag)
const;
171 void write(
const char *tag,
const char *str);
172 void write(
const char *tag,
const double *values,
size_t N);
177 size_t read(
const char *tag,
double *output,
unsigned long size)
const;
190 static size_t alignSize(
size_t size) {
return (size + (alignment - 1)) & ~(alignment - 1); }
205 void alignmentChecks()
const;
210 static size_t sizeSize() {
return alignSize(
sizeof(
size_t)); }
211 static size_t sizeString(
const char *str) {
return sizeSize() +
alignSize(strlen(str) + 1); }
212 static size_t sizeArray(
size_t N) {
return sizeSize() +
alignSize((N *
sizeof(
double))); }
217 void writeSize(
size_t size);
218 void writeString(
const char *str);
219 void writeDoubles(
const double *ptr,
size_t N);
224 static void readSize(
BytePointer *readPtr,
size_t *size);
252 static const size_t minGrowSize = 512;
260 AutoSerial(
const char *tag,
const double *values,
size_t N) {
write(tag, values, N); }
287 void add(
const char *str) { mInfoStrings.push_back(str); }
288 void add(
const std::string &str) { mInfoStrings.push_back(str); }
289 const char *
get(
unsigned long idx) {
return (idx < mInfoStrings.size()) ? mInfoStrings[idx].c_str() :
"No parameter info available"; }
293 std::vector<std::string> mInfoStrings;
311 enum Flags { kFlagInstantiation = 0x1, kFlagBool = 0x2, kFlagInteger = 0x4, kFlagNonNumeric = 0x8 };
315 Parameter(
const char *name,
long argumentIdx);
316 virtual ~Parameter() {};
323 void setBoolOnly() { mFlags |= kFlagBool | kFlagInteger; }
324 void setIntegerOnly() { mFlags |= kFlagInteger; }
325 void setNonNumeric() { mFlags |= kFlagNonNumeric; }
329 void setClip(
double min,
double max);
331 virtual SetError
set(
const char *str) {
return kParameterNotSetByString; }
332 virtual SetError
set(
double value) {
return kParameterNotSetByNumber; }
333 virtual SetError
set(
double *values,
size_t N);
335 virtual void clear() = 0;
341 virtual Type type() = 0;
343 const char *name()
const {
return mName.c_str(); }
344 long argumentIdx()
const {
return mArgumentIdx; }
345 int flags()
const {
return mFlags; }
348 double getMin()
const {
return mMin; }
349 double getMax() {
return mMax; }
350 void getRange(
double *min,
double *max)
const;
356 double getDefault()
const {
return mDefault; }
358 virtual double getValue()
const {
return 0; }
359 virtual const char *
getString()
const {
return nullptr; }
362 virtual const double *
getArray()
const {
return nullptr; }
390 class Enum final :
public Parameter
395 Enum(
const char *name,
long argumentIdx);
401 SetError
set(
double value)
override;
402 SetError
set(
double *values,
size_t N)
override;
403 virtual SetError
set(
const char *str)
override;
405 void clear()
override { Enum::set(0.0); }
407 virtual Type type()
override {
return kEnum; }
411 virtual double getValue()
const override {
return mValue; }
412 virtual const char *
getString()
const override {
return mItems[mValue].c_str(); }
413 virtual const char *
getItemString(
unsigned long item)
const override {
return mItems[item].c_str(); }
417 std::vector<std::string> mItems;
418 unsigned long mValue;
429 class Value final :
public Parameter
434 Value(
const char *name,
long argumentIdx,
double defaultValue) : Parameter(name, argumentIdx), mValue(defaultValue)
435 { mDefault = defaultValue; }
439 SetError
set(
double value)
override;
440 SetError
set(
double *values,
size_t N)
override;
442 void clear()
override { Value::set(mDefault); };
448 double getValue()
const override {
return mValue; }
463 class String final :
public Parameter
465 const static size_t maxLen = 128;
469 String(
const char *name,
long argumentIdx);
473 SetError
set(
const char *str)
override;
475 void clear()
override { String::set(
nullptr); };
481 const char *
getString()
const override {
return mCString; }
485 char mCString[maxLen + 1];
498 class Array final :
public Parameter,
private std::vector<double>
503 Array(
const char *name,
long argumentIdx,
double defaultValue,
size_t size);
504 Array(
const char *name,
long argumentIdx,
double defaultValue,
size_t maxSize,
size_t size);
508 SetError
set(
double *values,
size_t N)
override;
510 void clear()
override { Array::set(
nullptr, 0); };
518 const double *
getArray()
const override {
return mItems.data(); }
522 std::vector<double> mItems;
525 const bool mVariableSize;
533 : mErrorReporter(errorReporter), mProxy(proxy), mReportErrors(true), mParameterInfo(info) {}
546 unsigned long size()
const {
return mParameters.size(); }
550 for (
unsigned long i = 0; i < mParameters.size(); i++)
551 if (strcmp(name, mParameters[i]->name()) == 0)
554 long argumentIdx = convertToNumber(name);
556 if (argumentIdx >= 0)
557 for (
unsigned long i = 0; i < mParameters.size(); i++)
558 if (argumentIdx == mParameters[i]->argumentIdx())
561 if (argumentIdx >= 0)
562 handleError(kUnknownArgument, argumentIdx, argumentIdx);
564 handleError(kUnknownParameter, -1, name);
573 for (
unsigned long i = 0; i < mParameters.size(); i++)
574 argument = std::max(mParameters[i]->argumentIdx(), argument);
581 void addBool(
unsigned long index,
const char *name,
bool defaultValue =
false,
long argumentIdx = -1)
583 addParameter(index,
new Value(name, argumentIdx, defaultValue));
584 mParameters.back()->setClip(
false,
true);
585 mParameters.back()->setBoolOnly();
588 void addDouble(
unsigned long index,
const char *name,
double defaultValue = 0.0,
long argumentIdx = -1)
590 addParameter(index,
new Value(name, argumentIdx, defaultValue));
593 void addInt(
unsigned long index,
const char *name,
long defaultValue = 0,
long argumentIdx = -1)
595 addParameter(index,
new Value(name, argumentIdx, defaultValue));
596 mParameters.back()->setIntegerOnly();
599 void addString(
unsigned long index,
const char *name,
long argumentIdx = -1)
601 addParameter(index,
new String(name, argumentIdx));
604 void addEnum(
unsigned long index,
const char *name,
long argumentIdx = -1)
606 addParameter(index,
new Enum(name, argumentIdx));
611 mParameters.back()->addEnumItem(str);
614 void addBoolArray(
unsigned long index,
const char *name,
bool defaultValue,
size_t size,
long argumentIdx = -1)
616 addParameter(index,
new Array(name, argumentIdx, defaultValue, size));
617 mParameters.back()->setBoolOnly();
620 void addIntArray(
unsigned long index,
const char *name,
long defaultValue,
size_t size,
long argumentIdx = -1)
622 addParameter(index,
new Array(name, argumentIdx, defaultValue, size));
623 mParameters.back()->setIntegerOnly();
626 void addDoubleArray(
unsigned long index,
const char *name,
double defaultValue,
size_t size,
long argumentIdx = -1)
628 addParameter(index,
new Array(name, argumentIdx, defaultValue, size));
631 void addVariableBoolArray(
unsigned long index,
const char *name,
long defaultValue,
size_t maxSize,
size_t size,
long argumentIdx = -1)
633 addParameter(index,
new Array(name, argumentIdx, defaultValue, maxSize, size));
634 mParameters.back()->setBoolOnly();
637 void addVariableIntArray(
unsigned long index,
const char *name,
long defaultValue,
size_t maxSize,
size_t size,
long argumentIdx = -1)
639 addParameter(index,
new Array(name, argumentIdx, defaultValue, maxSize, size));
640 mParameters.back()->setIntegerOnly();
645 addParameter(index,
new Array(name, argumentIdx, defaultValue, maxSize, size));
656 void setMin(
double min) { mParameters.back()->setMin(min); }
657 void setMax(
double max) { mParameters.back()->setMax(max); }
658 void setClip(
double min,
double max) { mParameters.back()->setClip(min, max); }
662 void set(
Serial *serialised) {
if (serialised) serialised->read(
this); }
664 void set(
unsigned long idx,
bool value) {
set(idx, (double) value); }
665 void set(
const char *name,
bool value) {
set(name, (double) value); }
667 void set(
unsigned long idx,
long value) {
set(idx, (double) value); }
668 void set(
const char *name,
long value) {
set(name, (double) value); }
670 void set(
unsigned long idx,
double value) {
if (idx <
size()) handleError(mParameters[idx]->
set(value), idx, value); }
671 void set(
const char *name,
double value) {
set(
getIdx(name), value); }
673 void set(
unsigned long idx,
char *str) {
if (idx <
size()) handleError(mParameters[idx]->
set(str), idx, str); }
674 void set(
const char *name,
char *str) {
set(
getIdx(name), str); }
676 void set(
unsigned long idx,
double *values,
size_t N) {
if (idx <
size()) handleError(mParameters[idx]->
set(values, N), idx, *values); }
677 void set(
const char *name,
double *values,
size_t N) {
set(
getIdx(name), values, N); }
679 void clear(
unsigned long idx) {
if (idx <
size()) mParameters[idx]->clear(); }
686 std::string
getName(
unsigned long idx)
const {
return mParameters[idx]->name(); }
688 long getArgumentIdx(
unsigned long idx)
const {
return mParameters[idx]->argumentIdx(); }
693 Type getType(
unsigned long idx)
const {
return mParameters[idx]->type(); }
709 double getMin(
unsigned long idx)
const {
return mParameters[idx]->getMin(); }
712 double getMax(
unsigned long idx)
const {
return mParameters[idx]->getMax(); }
715 void getRange(
unsigned long idx,
double *min,
double *max)
const {
return mParameters[idx]->getRange(min, max); }
720 std::string
getItemString(
unsigned long idx,
unsigned long item)
const {
return mParameters[idx]->getItemString(item); }
725 std::string
getInfo(
unsigned long idx)
const {
return mParameterInfo ? mParameterInfo->get(idx) :
"No parameter info available"; }
730 double getDefault(
unsigned long idx)
const {
return mParameters[idx]->getDefault(); }
738 double getValue(
unsigned long idx)
const {
return mParameters[idx]->getValue(); }
747 const char *
getString(
unsigned long idx)
const {
return mParameters[idx]->getString(); }
750 const double *
getArray(
unsigned long idx)
const {
return mParameters[idx]->getArray(); }
752 const double *
getArray(
unsigned long idx,
size_t *
size)
const {
return mParameters[idx]->getArray(size); }
755 size_t getArraySize(
unsigned long idx)
const {
return mParameters[idx]->getArraySize(); }
758 size_t getArrayMaxSize(
unsigned long idx)
const {
return mParameters[idx]->getArrayMaxSize(); }
761 bool changed(
unsigned long idx) {
return mParameters[idx]->changed(); }
768 template <
typename T>
769 void handleError(SetError error,
long idx, T arg)
const 771 if (error && mReportErrors)
775 case kUnknownArgument:
776 mErrorReporter.reportError(
kErrorParameter, mProxy,
"argument # out of range", idx + 1);
778 case kUnknownParameter:
779 mErrorReporter.reportError(
kErrorParameter, mProxy,
"no parameter named '#'", arg);
781 case kParameterNotSetByNumber:
782 mErrorReporter.reportError(
kErrorParameter, mProxy,
"parameter '#' cannot be set by a number", mParameters[idx]->name());
784 case kParameterNotSetByString:
785 mErrorReporter.reportError(
kErrorParameter, mProxy,
"parameter '#' cannot be set by a string", mParameters[idx]->name());
787 case kEnumUnknownIndex:
788 mErrorReporter.reportError(
kErrorParameter, mProxy,
"enum parameter '#' does not contain an item numbered #", mParameters[idx]->name(), arg);
790 case kEnumUnknownString:
791 mErrorReporter.reportError(
kErrorParameter, mProxy,
"enum parameter '#' does not contain an item named '#'", mParameters[idx]->name(), arg);
801 void addParameter(
unsigned long index, Parameter *parameter)
803 assert((index == mParameters.size()) &&
"parameters must be added in order");
804 mParameters.add(parameter);
807 static long convertToNumber(
const char *name)
811 for (
unsigned long i = 0; ; i++)
813 long current = name[i];
815 if (current == 0 && i)
818 if (current < '0' || current >
'9')
821 result = (result * 10) + (current -
'0');
832 Info *mParameterInfo;
AutoSerial(size_t size)
Definition: FrameLib_Parameters.h:257
size_t getArraySize(unsigned long idx) const
Definition: FrameLib_Parameters.h:755
void addEnumItem(unsigned long index, const char *str)
Definition: FrameLib_Parameters.h:609
~AutoSerial()
Definition: FrameLib_Parameters.h:261
void add(const char *str)
Definition: FrameLib_Parameters.h:287
long getBool(unsigned long idx) const
Definition: FrameLib_Parameters.h:744
Definition: FrameLib_Parameters.h:38
void addDouble(unsigned long index, const char *name, double defaultValue=0.0, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:588
Iterator find(const char *tag) const
Definition: FrameLib_Parameters.cpp:307
double getValue(const char *name) const
Definition: FrameLib_Parameters.h:739
a set of parameters for a FrameLib object.
Definition: FrameLib_Parameters.h:30
NumericType getNumericType(const char *name) const
Definition: FrameLib_Parameters.h:697
void add(const std::string &str)
Definition: FrameLib_Parameters.h:288
unsigned long getVectorSize() const
Definition: FrameLib_Parameters.cpp:43
static size_t inPlaceSize(size_t size)
Definition: FrameLib_Parameters.h:191
Definition: FrameLib_Errors.h:22
static Serial * newInPlace(void *ptr, size_t size)
Definition: FrameLib_Parameters.h:193
unsigned long mNumTags
Definition: FrameLib_Parameters.h:238
DataType
Definition: FrameLib_Types.h:55
Serial()
Definition: FrameLib_Parameters.cpp:162
Iterator end() const
Definition: FrameLib_Parameters.h:142
void setClip(double min, double max)
Definition: FrameLib_Parameters.h:658
static size_t calcSize(const Serial *serialised)
Definition: FrameLib_Parameters.h:156
void getRange(const char *name, double *min, double *max) const
Definition: FrameLib_Parameters.h:716
char * getString() const
Definition: FrameLib_Parameters.cpp:52
void write(const char *tag, const char *str)
Definition: FrameLib_Parameters.h:266
DataType getType() const
Definition: FrameLib_Parameters.h:104
std::string getName(unsigned long idx) const
Definition: FrameLib_Parameters.h:686
void getRange(unsigned long idx, double *min, double *max) const
Definition: FrameLib_Parameters.h:715
const double * getArray(unsigned long idx, size_t *size) const
Definition: FrameLib_Parameters.h:752
a set of tagged parameter values using external non-owned memory.
Definition: FrameLib_Parameters.h:51
double getMin(unsigned long idx) const
Definition: FrameLib_Parameters.h:709
void read(Serial *serial) const
Definition: FrameLib_Parameters.cpp:74
std::string getItemString(const char *name, unsigned long item) const
Definition: FrameLib_Parameters.h:721
void addVariableIntArray(unsigned long index, const char *name, long defaultValue, size_t maxSize, size_t size, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:637
bool operator==(const Iterator &it) const
Definition: FrameLib_Parameters.h:96
a virtual struct allowing for extensible communication to/from the host environment.
Definition: FrameLib_Types.h:69
ClipMode getClipMode(unsigned long idx) const
Definition: FrameLib_Parameters.h:706
Definition: FrameLib_Parameters.h:38
AutoSerial(const Serial &serial)
Definition: FrameLib_Parameters.h:258
const double * getVector(unsigned long *size) const
Definition: FrameLib_Parameters.cpp:29
void setMax(double max)
Definition: FrameLib_Parameters.h:657
double getDefault(const char *name) const
Definition: FrameLib_Parameters.h:731
double getMin(const char *name) const
Definition: FrameLib_Parameters.h:710
unsigned long numTags() const
Definition: FrameLib_Parameters.h:186
void setErrorReportingEnabled(bool enable)
Definition: FrameLib_Parameters.h:542
void addBool(unsigned long index, const char *name, bool defaultValue=false, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:581
void write(const Serial *serialised)
Definition: FrameLib_Parameters.cpp:216
void clear(unsigned long idx)
Definition: FrameLib_Parameters.h:679
size_t mSize
Definition: FrameLib_Parameters.h:236
Definition: FrameLib_Parameters.h:38
long maxArgument() const
Definition: FrameLib_Parameters.h:569
a class used to report errors to the host environment.
Definition: FrameLib_Errors.h:34
bool matchTag(const char *tag) const
Definition: FrameLib_Parameters.h:114
Type getType(unsigned long idx) const
Definition: FrameLib_Parameters.h:693
std::string getInfo(unsigned long idx) const
Definition: FrameLib_Parameters.h:725
void addVariableBoolArray(unsigned long index, const char *name, long defaultValue, size_t maxSize, size_t size, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:631
an iterator for the items in a Serial.
Definition: FrameLib_Parameters.h:68
Definition: FrameLib_Parameters.h:39
void write(const char *tag, const double *values, size_t N)
Definition: FrameLib_Parameters.h:267
unsigned char * BytePointer
Definition: FrameLib_Types.h:27
size_t size() const
Definition: FrameLib_Parameters.h:187
std::string getInfo(const char *name) const
Definition: FrameLib_Parameters.h:726
void addVariableDoubleArray(unsigned long index, const char *name, double defaultValue, size_t maxSize, size_t size, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:643
size_t mMaxSize
Definition: FrameLib_Parameters.h:237
size_t getArraySize(const char *name) const
Definition: FrameLib_Parameters.h:756
Definition: FrameLib_Parameters.h:39
NumericType
Definition: FrameLib_Parameters.h:37
static const size_t alignment
Definition: FrameLib_Parameters.h:58
void addIntArray(unsigned long index, const char *name, long defaultValue, size_t size, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:620
Iterator & operator++()
Definition: FrameLib_Parameters.cpp:11
bool changed(const char *name)
Definition: FrameLib_Parameters.h:762
long getArgumentIdx(unsigned long idx) const
Definition: FrameLib_Parameters.h:688
Definition: FrameLib_Parameters.h:38
Definition: FrameLib_Parameters.h:39
AutoSerial(const char *tag, const char *string)
Definition: FrameLib_Parameters.h:259
Definition: FrameLib_Parameters.h:38
bool operator!=(const Iterator &it) const
Definition: FrameLib_Parameters.h:97
size_t getSize() const
Definition: FrameLib_Parameters.cpp:61
const char * getString(unsigned long idx) const
Definition: FrameLib_Parameters.h:747
unsigned char Byte
Definition: FrameLib_Types.h:26
double getValue(unsigned long idx) const
Definition: FrameLib_Parameters.h:738
void setMin(double min)
Definition: FrameLib_Parameters.h:656
BytePointer mPtr
Definition: FrameLib_Parameters.h:235
long getInt(unsigned long idx) const
Definition: FrameLib_Parameters.h:741
Definition: FrameLib_Parameters.h:37
NumericType getNumericType(unsigned long idx) const
Definition: FrameLib_Parameters.cpp:695
void clear(const char *name)
Definition: FrameLib_Parameters.h:680
unsigned long size() const
Definition: FrameLib_Parameters.h:546
double getMax(const char *name) const
Definition: FrameLib_Parameters.h:713
Serial & operator=(const Serial &)=delete
AutoSerial(const char *tag, const double *values, size_t N)
Definition: FrameLib_Parameters.h:260
a class for passing info strings to FrameLib_Parameters.
Definition: FrameLib_Parameters.h:282
const double * getArray(unsigned long idx) const
Definition: FrameLib_Parameters.h:750
std::string getTypeString(unsigned long idx) const
Definition: FrameLib_Parameters.cpp:706
char * getTag() const
Definition: FrameLib_Parameters.h:105
std::string getItemString(unsigned long idx, unsigned long item) const
Definition: FrameLib_Parameters.h:720
void alias(Serial *serial, const char *tag) const
Definition: FrameLib_Parameters.cpp:112
void write(const Serial *serialised)
Definition: FrameLib_Parameters.h:265
ClipMode
Definition: FrameLib_Parameters.h:39
AutoSerial()
Definition: FrameLib_Parameters.h:256
long getArgumentIdx(const char *name) const
Definition: FrameLib_Parameters.h:689
ClipMode getClipMode(const char *name) const
Definition: FrameLib_Parameters.h:707
size_t getArrayMaxSize(unsigned long idx) const
Definition: FrameLib_Parameters.h:758
void setInstantiation()
Definition: FrameLib_Parameters.h:652
long getIdx(const char *name) const
Definition: FrameLib_Parameters.h:548
Type
Definition: FrameLib_Parameters.h:38
Definition: FrameLib_Parameters.h:37
bool getBool(const char *name) const
Definition: FrameLib_Parameters.h:745
const double * getArray(const char *name, size_t *size) const
Definition: FrameLib_Parameters.h:753
long getInt(const char *name) const
Definition: FrameLib_Parameters.h:742
static size_t alignSize(size_t size)
Definition: FrameLib_Parameters.h:190
bool checkSize(size_t writeSize)
Definition: FrameLib_Parameters.cpp:390
unsigned long getIndex() const
Definition: FrameLib_Parameters.h:110
double getDefault(unsigned long idx) const
Definition: FrameLib_Parameters.h:730
Type getType(const char *name) const
Definition: FrameLib_Parameters.h:694
const double * getArray(const char *name) const
Definition: FrameLib_Parameters.h:751
static size_t calcSize(const char *tag, const char *str)
Definition: FrameLib_Parameters.h:158
an extension of Serial that manages its own resizable memory.
Definition: FrameLib_Parameters.h:250
size_t getArrayMaxSize(const char *name) const
Definition: FrameLib_Parameters.h:759
Iterator begin() const
Definition: FrameLib_Parameters.h:141
std::string getDefaultString(const char *name) const
Definition: FrameLib_Parameters.h:734
Definition: FrameLib_Parameters.h:39
void addInt(unsigned long index, const char *name, long defaultValue=0, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:593
Iterator(const Serial *serial, bool end)
Definition: FrameLib_Parameters.h:92
std::string getTypeString(const char *name) const
Definition: FrameLib_Parameters.h:702
FrameLib_Parameters(FrameLib_ErrorReporter &errorReporter, FrameLib_Proxy *proxy, Info *info)
Definition: FrameLib_Parameters.h:532
Definition: FrameLib_Parameters.h:37
void addBoolArray(unsigned long index, const char *name, bool defaultValue, size_t size, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:614
bool changed(unsigned long idx)
Definition: FrameLib_Parameters.h:761
void addEnum(unsigned long index, const char *name, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:604
const char * getString(const char *name) const
Definition: FrameLib_Parameters.h:748
void addString(unsigned long index, const char *name, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:599
static size_t calcSize(const char *tag, size_t N)
Definition: FrameLib_Parameters.h:159
std::string getDefaultString(unsigned long idx) const
Definition: FrameLib_Parameters.cpp:729
void clear()
Definition: FrameLib_Parameters.h:188
void addDoubleArray(unsigned long index, const char *name, double defaultValue, size_t size, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:626
Definition: FrameLib_Parameters.h:37
double getMax(unsigned long idx) const
Definition: FrameLib_Parameters.h:712